package com.ruoyi.system.controller;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.PreAuthorize;
import com.ruoyi.system.domain.TrendData;
import com.ruoyi.system.domain.TrendType;
import com.ruoyi.system.service.ITrendTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 趋势图管理Controller
 *
 * @author cjie
 * @date 2022-11-30
 */
@Api(tags = " 趋势图管理")
@RestController
@RequestMapping("/trendType")
public class TrendTypeController extends BaseController {
    @Autowired
    private ITrendTypeService trendTypeService;

    /**
     * 查询趋势图管理列表
     */
    @ApiOperation(value="查询趋势图管理列表", notes="查询趋势图管理列表")
    @PreAuthorize(hasPermi = "system:trendType:list")
    @GetMapping("/list")
    public TableDataInfo list(TrendType trendType) {
        startPage();
        List<TrendType> list = trendTypeService.selectTrendTypeList(trendType);
        return getDataTable(list);
    }

    /**
     * 导出趋势图管理列表
     */
    @ApiOperation(value="导出趋势图管理列表", notes="导出趋势图管理列表")
    @PreAuthorize(hasPermi = "system:trendType:export")
    @PostMapping("/export")
    public void export(HttpServletResponse response, TrendType trendType) throws IOException {
        List<TrendType> list = trendTypeService.selectTrendTypeList(trendType);
        ExcelUtil<TrendType> util = new ExcelUtil<TrendType>(TrendType.class);
        util.exportExcel(response, list, "趋势图管理数据");
    }
    /**
     * 获取趋势图管理详细信息
     */
    @ApiOperation(value="获取趋势图管理详细信息", notes="获取趋势图管理详细信息")
    @PreAuthorize(hasPermi = "system:trendType:query")
    @GetMapping(value = "/{trendId}")
    public AjaxResult getInfo(@PathVariable("trendId") Long trendId) {
        return AjaxResult.success(trendTypeService.selectTrendTypeById(trendId));
    }

    /**
     * 新增趋势图管理
     */
    @ApiOperation(value="新增趋势图管理", notes="新增趋势图管理")
    @PreAuthorize(hasPermi = "system:trendType:add")
    @PostMapping
    public AjaxResult add(@RequestBody TrendType trendType) {
        return toAjax(trendTypeService.insertTrendType(trendType));
    }

    /**
     * 修改趋势图管理
     */
    @ApiOperation(value="修改趋势图管理", notes="修改趋势图管理")
    @PreAuthorize(hasPermi = "system:trendType:edit")
    @PutMapping
    public AjaxResult edit(@RequestBody TrendType trendType) {
        return toAjax(trendTypeService.updateTrendType(trendType));
    }

    /**
     * 删除趋势图管理
     */
    @ApiOperation(value="删除趋势图管理", notes="删除趋势图管理")
    @ApiImplicitParam(name = "ids", value = "趋势图管理ID数组", required = true,paramType = "path", allowMultiple=true, dataType = "String")
    @PreAuthorize(hasPermi = "system:trendType:remove")
    @DeleteMapping("/{trendIds}")
    public AjaxResult remove(@PathVariable Long[] trendIds) {
        return toAjax(trendTypeService.deleteTrendTypeByIds(trendIds));
    }

    /**
     * 获取趋势图数据
     */
    @ApiOperation(value="获取趋势图数据", notes="获取趋势图数据")
    @GetMapping(value = "/trend_data/{type}")
    public R<Map<String,String>> getTrendDataByType(@PathVariable("type") String type, @RequestParam(required = false) Integer limit){
        return R.ok(trendTypeService.selectTrendTypeDataByType(type,limit));
    }

    /**
     * 获取趋势图数据
     */
    @ApiOperation(value="获取图数据列表", notes="获取图数据列表")
    @GetMapping(value = "/trend_data_list/{type}")
    public R<List<TrendData>> selectTrendDataByType(@PathVariable("type") String type){
        return R.ok(trendTypeService.selectTrendTypeData(type));
    }

    @ApiOperation(value="获取趋势图key数据", notes="获取趋势图key数据")
    @PostMapping(value="/getTrendDataByTypeAndKey")
    public R<TrendData> getTrendDataByTypeAndKey(@RequestParam("trendType") String trendType,@RequestParam("key") String key){
        return R.ok(trendTypeService.selectTrendTypeDataByTypeAndKey(trendType,key));
    }
    /**
     * 新增趋势图管理
     */
    @ApiOperation(value="添加趋势图数据", notes="添加趋势图数据")
    @Log(title = "添加趋势图数据", businessType = BusinessType.INSERT)
    @PostMapping(value="/addTrendData")
    public R addTrendData(@RequestBody TrendData trendData) {
        return toR(trendTypeService.insertTrendData(trendData));
    }

    //@Param(value="sqlStr")
    @ApiOperation(value="执行SQL字符串", notes="执行SQL字符串")
    @PostMapping(value="/execSql")
    public R<List<Map<String, Object>>> selectDataListBySql(@RequestParam("sqlStr") String sqlStr) {
        return R.ok(trendTypeService.selectDataListBySql(sqlStr));
    }

    /**
     * 新增趋势图管理
     */
    @ApiOperation(value="远程添加趋势图类型", notes="远程添加趋势图类型")
    @Log(title = "远程添加趋势图类型", businessType = BusinessType.INSERT)
    @PostMapping(value="/addTrendType")
    public R addTrendType(@RequestBody TrendType trendType) {
        if(StringUtils.isBlank(trendType.getTrendType())){
            return R.fail("501","trendType 不能为空");
        }
        return toR(trendTypeService.insertTrendTypeAndData(trendType));
    }

    /**
     * 新增趋势图管理
     */
    @ApiOperation(value="远程更新趋势数据", notes="远程更新趋势数据")
    @Log(title = "远程更新趋势数据", businessType = BusinessType.INSERT)
    @PostMapping(value="/updateTrendDataValue")
    public R updateTrendDataValue(@RequestParam("trendType") String trendType,@RequestParam("key") String key, @RequestParam("dataValue") String dataValue) {
        int result =0;
        if(StringUtils.isBlank(trendType)){
            return R.fail("501","trendType 不能为空");
        }
        if(StringUtils.isBlank(key)){
            return R.fail("501","key 不能为空");
        }
        System.out.println(key);
        System.out.println(trendType);
        //查询 trendData,获取第一个，更新值
        TrendData trendData = new TrendData();
        trendData.setTrendType(trendType);
        trendData.setDataLabel(key);

        List<TrendData> dataList = trendTypeService.selectTrendDataList(trendData);
        if(dataList != null && dataList.size()>0){
            trendData.setDataCode(dataList.get(0).getDataCode());
            trendData.setDataValue(dataValue);
            result = trendTypeService.updateTrendData(trendData);
        }else {
            return R.fail("trendType or key is not exist");
        }

        return toR(result);
    }
}
